//package com.hippo.database.mapper;
//
//import com.mongodb.client.result.DeleteResult;
//import com.mongodb.client.result.UpdateResult;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.query.Query;
//import org.springframework.data.mongodb.core.query.Update;
//import org.springframework.stereotype.Component;
//
//import java.util.Collection;
//import java.util.List;
//
///**
// * @ClassName MongoTemplateBase
// * @Description TODO 重写MongoTemplate
// * @Author tangxl
// * @create 2023-03-20 10:49
// **/
//@Slf4j
//@Component
//public class MongoUtils {
//
//    @Autowired
//    private MongoTemplate mongoTemplate;
//
//
//    /**
//     * 单条插入
//     * 解释：使用save函数里，如果原来的对象不存在，那他们都可以向collection里插入数据，如果已经存在，save会调用update更新里面的记录，而insert则会忽略操作。
//     * @param object 实体类
//     */
//    public Object insert(Object object) {
//        Object insert = mongoTemplate.insert(object);
//        log.info("insert:{}", insert);
//        return insert;
//    }
//
//    /**
//     * 单条插入
//     * @param object 实体类
//     * @param collectionName 集合名
//     * 解释：使用save函数里，如果原来的对象不存在，那他们都可以向collection里插入数据，如果已经存在，save会调用update更新里面的记录，而insert则会忽略操作。
//     */
//    public Object insert(Object object, String collectionName) {
//        Object insert = mongoTemplate.insert(object, collectionName);
//        log.info("insert:{}", insert);
//        return insert;
//    }
//
//    /**
//     * 单条插入
//     * @param object 实体类
//     * 解释：使用save函数里，如果原来的对象不存在，那他们都可以向collection里插入数据，如果已经存在，save会调用update更新里面的记录，而insert则会忽略操作。
//     */
//    public Object save(Object object){
//        Object save = mongoTemplate.save(object);
//        log.info("save:{}", save);
//        return save;
//    }
//
//    /**
//     * 批量插入
//     * @param objects 实体类集合
//     *
//     */
//    public Collection<Object> insertAll(List<Object> objects) {
//        Collection<Object> objectCollection = mongoTemplate.insertAll(objects);
//        log.info("insertAll:{}", objectCollection);
//        return objectCollection;
//    }
//
//    /**
//     * 查询所有
//     * @param objectClass 实体类
//     */
//    public <T> List<T> findAll(Class<T> objectClass) {
//        List<T> all = mongoTemplate.findAll(objectClass);
//        log.info("findAll:{}", all);
//        return all;
//    }
//
//    /**
//     * 根据Id查询
//     * @param id id
//     */
//    public <T>T findById(String id, Class<T> objectClass) {
//        Object byId = mongoTemplate.findById(id, objectClass);
//        log.info("findById:{}", byId);
//        return (T)byId;
//    }
//
//    /**
//     * 多条件查询
//     * @param query 查询条件
//     * @param objectClass 实体类
//     */
//    public <T> List<T> find(Query query, Class<T> objectClass) {
//        List<T> all = mongoTemplate.find(query, objectClass);
//        log.info("find:{}", all);
//        return all;
//    }
//
//    /**
//     * 更新数据
//     * @param query
//     * @param update
//     * @param objectClass
//     * @return
//     * @param <T>
//     */
//    public <T> T upsert(Query query, Update update, Class<T> objectClass){
//        UpdateResult upsert = mongoTemplate.upsert(query, update, objectClass);
//        log.info("upsert:{}", upsert);
//        return upsert.getUpsertedId() != null ? (T)upsert.getUpsertedId() : null;
//    }
//
//    /**
//     * 删除数据
//     * @param query 查询条件
//     * @param objectClass 实体类
//     */
//    public <T> DeleteResult remove(Query query, Class<T> objectClass){
//        DeleteResult remove = mongoTemplate.remove(query, objectClass);
//        log.info("remove:{}", remove);
//        return remove;
//    }
//
//
//}
